package com.myapp.hibernate.util;

import com.myapp.hibernate.model.Apuesta;
import com.myapp.hibernate.model.Combate;
import java.util.ArrayList;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;


public class ApuestaUtil {

    private Session sesion;
    private Transaction tx;

    private void iniciaOperacion() throws HibernateException {
        sesion = HibernateUtil.getSessionFactory().openSession();
        tx = sesion.beginTransaction();
    }

    private void manejaExcepcion(HibernateException e) throws HibernateException {
        tx.rollback();
        throw new HibernateException("Ocurrió un error en la capa de acceso a datos. Apuesta", e);
    }

    public Apuesta obtenerApuesta(int idApuesta) throws HibernateException {
        Apuesta e = new Apuesta();
        try {
            iniciaOperacion();
            e = (Apuesta) sesion.get(Apuesta.class, idApuesta);
        } finally {
            sesion.close();
        }

        return e;
    }

    public ArrayList<Apuesta> obtenerListaApuestas() throws HibernateException {
        ArrayList<Apuesta> lista = new ArrayList<Apuesta>();
        try {
            iniciaOperacion();
            lista = (ArrayList<Apuesta>) sesion.createQuery("from Apuesta").list();
        } finally {
            sesion.close();
        }
        return lista;
    }

    public void guardar(Apuesta nuevo) {
        try {
            iniciaOperacion();
            sesion.save(nuevo);
            tx.commit();
        } catch (HibernateException e) {
            manejaExcepcion(e);
            throw e;
        } finally {
            sesion.close();
        }
    }

    public void borrar(Apuesta Apuesta) {
        try {
            iniciaOperacion();
            sesion.delete(Apuesta);
            tx.commit();
        } catch (HibernateException e) {
            manejaExcepcion(e);
            throw e;
        }
    }
    
    public void borrarReferencias(int idUsuario){
        try{
            iniciaOperacion();
            String hqlDelete = "delete From Apuesta where id_usuario = "+idUsuario;
            sesion.createQuery(hqlDelete).executeUpdate();
            tx.commit();
        } catch(HibernateException e){
            manejaExcepcion(e);
            throw e;
        }
    }
    
    public void borrarReferenciasPorBoxeador(int idBoxeador){
        try{
            iniciaOperacion();
            String hqlDelete = "delete From Apuesta where id_boxeador = "+idBoxeador;
            sesion.createQuery(hqlDelete).executeUpdate();
            tx.commit();
        } catch(HibernateException e){
            manejaExcepcion(e);
            throw e;
        }
    }
    
    public void borrarReferenciasPorCombate(Combate c){
        try{
            iniciaOperacion();
            String hqlDelete = "delete From Apuesta where id_combate = "+c.getIdCombate();
            sesion.createQuery(hqlDelete).executeUpdate();
            tx.commit();
        } catch(HibernateException e){
            manejaExcepcion(e);
            throw e;
        }
    }
    
    public void actualizarApuesta(Apuesta a){
        try{
            iniciaOperacion();
            sesion.update(a);
            tx.commit();
        }catch(HibernateException e){
            manejaExcepcion(e);
            throw e;
        }
    }
}
